package com.imooc.bilibili.api;

import com.imooc.bilibili.domain.JsonResponse;
import com.imooc.bilibili.service.FileService;
import com.imooc.bilibili.util.OSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class FileApi {

    @Autowired
    private FileService fileService;

    /**
     * 将文件进行md5加密
     *
     * @param file 要上传的文件
     * @return 返回加密后的md5字符串
     * @throws Exception
     */
    @PostMapping("/md5files")
    public JsonResponse<String> getFileMD5(MultipartFile file) throws Exception {
        String fileMD5 = fileService.getFileMD5(file);
        return new JsonResponse<>(fileMD5);
    }

    /**
     * 断点续传
     *
     * @param slice        要上传的文件
     * @param fileMd5      文件经过MD5加密后，可以形成它唯一的标识符，可以进行秒传功能的开发
     * @param sliceNo      当前要上传的分片是第几片
     * @param totalSliceNo 总共要上传的分片数
     * @return
     * @throws Exception
     */
    @PutMapping("/file-slices")
    public JsonResponse<String> uploadFileBySlices(MultipartFile slice, String fileMd5, Integer sliceNo, Integer totalSliceNo) throws Exception {
        String filePath = fileService.uploadFileBySlices(slice, fileMd5, sliceNo, totalSliceNo);
        return new JsonResponse<>(filePath);
    }

    /**
     * 通过阿里云OSS进行文件分片上传
     *
     * @param slice
     * @param fileMd5
     * @return
     */
    @PutMapping("/file-oss")
    public JsonResponse<String> uploadFileBySlicesOss(MultipartFile slice, String fileMd5) {
        String filePath = fileService.uploadFileBySlicesOss(slice, fileMd5);
        return new JsonResponse<>(filePath);
    }

}
